آموزش مفهوم Event Handling ( مدیریت رویدادها ) در Spring
در کلیه مراحل آموزشی قبلی Spring ، متوجه شدید که بخش اصلی یک برنامه Spring محتوی ApplicationContext است که چرخه حیات کامل Bean ها در برنامه کنترل می کند .
ApplicationContext ، رویدادهای مشخصی را در هنگام لود و فراخوانی Bean های برنامه اجرا می کند . برای مثال ، رویداد ContextStartedEvent هنگامی مه Context شروع به لود کرده ، اجرا شده و رویداد ContextStopedEvent در هنگام پایان لود شدن Context رخ
می دهد .
مدیریت رویدادها ( Event Handling ) در ApplicationContext را اجرا کند ، هربار که کلاس ApplicationEvent به ApplicationContext ارسال شود ، شی Bean از این عمل مطلع خواهد شد .
Spring شامل رویدادهای استاندارد زیر می باشد که به تشریح هر یک خواهیم پرداخت :
- ContextResfreshed : این رویداد زمانی مه محتوی ApplicatinContext Event مقدار دهی اولیه ( initialized ) یا تازه ( Refresh ) می شود ، رخ می دهد . همچنین این رویداد را می توان با استفاده از متد refresh() رابط کاربری ApplicationContext اجرا نمود .
- ContextStoppedEvent این رویداد زمانی که اجرا ApplicatinContext به استفاده از متد stop() رابط کاربری Configurable متوقف می شود ، رخ میدهد .
پس از متد ، می توانید کارهای مربوط به نگهداری و یهینه سازی سیستم را انجام دهید.
- ContextClosedEvent : این رویداد زمانی رخ می دهد که ApplicationContext با استفاده از متد Closed() رابط کاربری Con بسته می شوید . context ای که بسته شود ، به انتهای چرخه حیات کاری خود خواهد رسید . این Context دیگر نمی تواند لود مجدد ( Refreshed ) یا شروع مجدد ( restart ) شود .
- RequestHandledEvent : این رویداد یک event مختص فضای وب بوده و به کلیه Bean های برنامه اعلام می کند که به یک درخواست HTTP سرویس .
مدیریت رویدادها در Spring ، یک پروسه تک عملیات (single thread ) است . بنابراین زمانی که یک رویدا اجرا می شود ، تا زمانی که کلیه گیرنده های آن رویداد پیام خود را دریافت کرده و به طور کامل اجرا شود ، سایر پروسه های برنامه متوقف شده و روال برنامه stop می شود .
گوش دادن به رویدادهای Context
برای گوش دادن به یک رویداد Context ، هر Bean بایستی رابط کاربری ApplicationListener را که فقط دارای یک متد به نام onApplicationEvent() را اجرا کند .
برای درک بهتر مطالب ارایه شده ، مثال عملی را مطرح می کنیم تا ببینیم رویدادها ( events ) چگونه منتشر شده و شما چگونه می توانید کدهای خود را طوری بنویسید تا اجرای آنها بسته به رخ دادن event ها باشند .
مثال عملی را با طی مراحل زیر در محیط Eclipse طراحی می کنیم :
- یک پروژه جدید به نام SpringExample و یک پکیج جدید را به نام com.tahlildadeh را در پوشه src برنامه ایجاد کنید .
- همانطور که در بخش نوشتن اولین برنامه با Spring آموزش دادیم ، کتابخانه های لازم برنامه را با استفاده از Extered JARs به پروژه اضافه کنید .
- کلاس های HelloWorld ، CStartEvantHandler ، CStopEventHandler و MainApp را در پکیج com.tahlildadeh ایجاد کنید .
- در پوشه src پروژه ، فایل پیکربندی اطلاعات Beans.xml را ایجاد کنید .
- مرحله آخر ایجاد محتوای کلیه فایل های جاوا پروژه و همچنین فایل پیکربندی اطلاعات Beans ها می باشد که در مراحل زیر توضیح داده شده است .
کد زیر را در فایل Hello.World.java قرار دهید :
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
همچنین محتوای فایل CStartEventHandler.java به صورت زیر است :
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class CStartEventHandler implements ApplicationListener{ public void onApplicationEvent(ContextStartedEvent event) { System.out.println("ContextStartedEvent Received"); } }
کد زیر نیز مربوط به فایل CStopEventHandler.java است :
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStoppedEvent; public class CStopEventHandler implements ApplicationListener{ public void onApplicationEvent(ContextStoppedEvent event) { System.out.println("ContextStoppedEvent Received"); } }
محتویات فایل اصلی برنامه MainApp.java به این صورت است :
package com.tutorialspoint;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ConfigurableApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
// Let us raise a start event.
context.start();
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
// Let us raise a stop event.
context.stop();
}
}
در نهایت نیز ، کد فایل پیکربندی اطلاعات برنامه Bean.xml به صورت زیر تعریف می شود :
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
id="helloWorld" class="com.tutorialspoint.HelloWorld">
name="message" value="Hello World!"/>
id="cStartEventHandler"
class="com.tutorialspoint.CStartEventHandler"/>
id="cStopEventHandler"
class="com.tutorialspoint.CStopEventHandler"/>
پس از اینکه فایل های برنامه را ایجاد کردیم ، می توانیم آن را اجرا کنیم . در صورت درست بودن همه موارد ، خروجی زیر تولید خواهد شد ،
ContextStartedEvent Received Your Message : Hello World! ContextStoppedEvent Received
در آخر هم اگر دوست داشتید ، می توانید رویدادهای دلخواه خود را نوشته و عملکرد آنها را در برنامه تست کنید .
برای نوشتن رویدادهای دلخواه خود ، به درس آموزش نوشتن Custom Events بروید .
Visit W3Schools.com!
Visit W3Schools.com!